const mysql = require('mysql2');
require('dotenv').config();

// 创建数据库连接
const db = mysql.createConnection({
    host: process.env.DB_HOST,
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_NAME
});

// 连接数据库
db.connect((err) => {
    if (err) {
        console.error('数据库连接失败:', err);
        return;
    }
    console.log('成功连接到MySQL数据库');
    
    // 修复所有用户的事件统计数据
    fixAllUserStats();
});

// 修复所有用户的事件统计数据
async function fixAllUserStats() {
    try {
        // 获取所有用户数据
        const users = await queryDatabase('SELECT username, events, records FROM user_data');
        
        console.log(`找到 ${users.length} 个用户，开始修复统计数据...`);
        
        let processedCount = 0;
        for (const user of users) {
            try {
                const username = user.username;
                
                // 安全解析events字段
                let events;
                if (typeof user.events === 'string') {
                    try {
                        events = JSON.parse(user.events || '{}');
                    } catch (parseError) {
                        console.log(`用户 ${username} 的events字段不是有效的JSON字符串，使用原始值`);
                        events = user.events || {};
                    }
                } else {
                    events = user.events || {};
                }
                
                // 安全解析records字段
                let records;
                if (typeof user.records === 'string') {
                    try {
                        records = JSON.parse(user.records || '{}');
                    } catch (parseError) {
                        console.log(`用户 ${username} 的records字段不是有效的JSON字符串，使用原始值`);
                        records = user.records || {};
                    }
                } else {
                    records = user.records || {};
                }
                
                console.log(`正在处理用户: ${username}`);
                
                // 确保events是对象
                if (typeof events !== 'object' || events === null || Array.isArray(events)) {
                    console.log(`用户 ${username} 的events字段格式不正确，跳过处理`);
                    continue;
                }
                
                // 确保records是对象
                if (typeof records !== 'object' || records === null || Array.isArray(records)) {
                    console.log(`用户 ${username} 的records字段格式不正确，跳过处理`);
                    continue;
                }
                
                // 重置所有事件计数
                Object.keys(events).forEach(event => {
                    if (events[event] && typeof events[event] === 'object') {
                        events[event].count = 0;
                    }
                });
                
                // 根据实际记录重新计算事件计数
                Object.keys(records).forEach(date => {
                    const dayEvents = records[date];
                    if (Array.isArray(dayEvents)) {
                        // 使用Set去重，确保同一天同一事件只统计一次
                        const eventSet = new Set();
                        
                        dayEvents.forEach(item => {
                            const eventName = item.event;
                            // 只统计存在的事件
                            if (eventName && events[eventName]) {
                                eventSet.add(eventName);
                            }
                        });
                        
                        // 增加去重后的事件计数
                        eventSet.forEach(event => {
                            events[event].count = (events[event].count || 0) + 1;
                        });
                    }
                });
                
                // 更新用户数据
                await queryDatabase(
                    'UPDATE user_data SET events = ? WHERE username = ?',
                    [JSON.stringify(events), username]
                );
                
                console.log(`用户 ${username} 的统计数据修复完成`);
                processedCount++;
            } catch (error) {
                console.error(`处理用户 ${user.username} 时出错:`, error);
            }
        }
        
        console.log(`数据修复完成！共处理了 ${processedCount} 个用户`);
        db.end();
    } catch (error) {
        console.error('修复过程中出错:', error);
        db.end();
    }
}

// 封装数据库查询为Promise
function queryDatabase(sql, params = []) {
    return new Promise((resolve, reject) => {
        db.query(sql, params, (err, results) => {
            if (err) {
                reject(err);
            } else {
                resolve(results);
            }
        });
    });
}